// app.js
import { getThemeStyleConfig, heartBeatAction, cityLinkage } from "./service/config"
import { getUploadToken } from './service/upload_service'

//imTODO
import { IMAPP_ID, wsApi } from "./service/base_service"
// const TIM = require('./sdk/tim-wx-sdk/index');
// const COS = require('./sdk/cos-wx-sdk-v5/cos-wx-sdk-v5');
let innerAudioContext = null;
let voiceUrl = "https://saas.img.ylyc.top/voice/newmsg.wav";

App({
  onLaunch(e) {
    // 获取当前帐号信息
    const accountInfo = wx.getAccountInfoSync();
    console.log("JJLog:账号信息是:" + JSON.stringify(accountInfo));
    // env的值: develop 开发 trial:体验  release:正式
    if (accountInfo.env) {
      this.globalData.appEnv = accountInfo.env;
    }
    // 绑定全局方法
    this.bindGlobalMethod(accountInfo.env);



    //隐藏系统tabbar
    wx.hideTabBar();
    //检测更新:
    this.checkAppletUpdate();

    //获取城市配置
    this.getAreaList();
    //获取主题配置:
    this.getThemeStyleConfigRequest();
    //获取右上角按钮配置:
    this.getMenuButton();
    //获取设备信息
    this.getSystemInfo();


    let that = this;

    // this.connectSocketMethod();
    // imTODO 单独写监听方法:
    // 打开
    // this.globalData.socketTask.onOpen(() => {
    //   console.log('webSocket已打开！================');
    //   this.globalData.socketOpen = true;
    // })
    // 失联
    // this.globalData.socketTask.onClose(() => {
    //   console.error("JJLog:监听到webSocket已经关闭======");
    //   this.globalData.socketOpen = false;
    //   // 关闭就重连
    //   this.connectSocketMethod();
    // })
    // 监听连接消息回调
    // this.globalData.socketTask.onMessage((msg) => {
    //   console.log("JJLog:开始监听socket消息=====:" + JSON.stringify(msg));
    //   let msgData = JSON.parse(msg.data);
    //   console.log("JJLog:socket消息处理=====:" + msgData.type);
    //   if (msgData.type == "CHAT_MSG") {
    //     that.globalData.newChatMsg = msgData.data;
    //     let pages = getCurrentPages()    //获取加载的页面
    //     let currentPage = pages[pages.length - 1]    //获取当前页面的对象
    //     let url = currentPage.route    //当前页面url

    //     if (url != "pages/message/message" && url != "firstPackage/pages/msgModule/chatRoom/chatRoom") {
    //       // innerAudioContext.autoplay = true;
    //       innerAudioContext.src = "https://saas.img.ylyc.top/voice/newmsg.wav";
    //       innerAudioContext.play()
    //     }
    //   }
    //   if (msgData.type == "CONVERSION_MSG") {
    //     that.globalData.lastConversation = msgData.data;
    //   }
    // })




    let isFirstEnter = wx.getStorageSync('firstEnter');
    if (!isFirstEnter) {
      this.globalData.isFirstEnter = true;
    } else {
      this.globalData.isFirstEnter = false;
    }

    // 是否三次进入新房详情界面:
    let isThreeEnter = wx.getStorageSync('threeHouseEnter');
    if (!isThreeEnter) {
      wx.setStorageSync('threeHouseEnter', 1)
    }

    // TIM配置=====================================
    let options = {
      SDKAppID: 1400508112
      // 集铺正式id;
    };

    // let tim = TIM.create(options); // SDK 实例通常用 tim 表示
    // 设置 SDK 日志输出级别，详细分级请参见 setLogLevel 接口的说明
    // tim.setLogLevel(1); // 普通级别，日志量较多，接入时建议使用
    // 注册 COS SDK 插件
    // tim.registerPlugin({ 'cos-wx-sdk': COS });
    // this.globalData.tim = tim;

    // 监听事件，如：
    // tim.on(TIM.EVENT.SDK_READY, function (event) {
    //   if (event.name == 'sdkStateReady') {
    //     //请求个人tim的个人资料数据:
    //     that.getTimProfile();
    //   }
    // });
    //收到消息
    // tim.on(TIM.EVENT.MESSAGE_RECEIVED, function (event) {
    //   if (event.data[0].conversationType == 'C2C') {
    //     console.log("JJLog:收到最新单聊消息了===");
    //     that.globalData.newChatMsg = event.data[0];
    //   }
    //   let pages = getCurrentPages()    //获取加载的页面
    //   let currentPage = pages[pages.length - 1]    //获取当前页面的对象
    //   let url = currentPage.route    //当前页面url

    //   if (url != "pages/message/message" && url != "firstPackage/pages/msgModule/chatRoom/chatRoom") {
    //     // innerAudioContext.autoplay = true;
    //     innerAudioContext.src = "https://saas.img.ylyc.top/voice/newmsg.wav";
    //     innerAudioContext.play()
    //   }
    // });
    // //会话列表更新
    // tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, function (event) {
    //   that.globalData.lastConversation = event.data[0];
    // });
    // //进入NOT_READY 状态
    // tim.on(TIM.EVENT.SDK_NOT_READY, function (event) {

    // });


    // TIM配置=====================================


    // setInterval(() => {
    //   heartBeatAction().then(res => {

    //   })
    // }, 60000)
    //创建音视频播放对象:
    innerAudioContext = wx.createInnerAudioContext();
  },
  onHide: function () {
    innerAudioContext.destroy()
  },
  onShow: function () {
    console.log("JJLog:小程序重新进入了===");
    // setTimeout(() => {
    //   if (!this.globalData.socketOpen) {
    //     console.log("JJLog:重新进行socket连接===");
    //     this.connectSocketMethod();
    //   }
    // }, 1500)


  },
  bindGlobalMethod(env) {
    wx.JJLog = (log) => {
      console.log("JJLog:当前环境:" + this.globalData.appEnv);
      if (env != 'release') {
        console.log(log)
      }
    }
  },

  // imTODO 连接socket也单独写一个方法
  connectSocketMethod() {
    //1.建立socket连接:
    let that = this;
    this.globalData.socketTask = wx.connectSocket({
      url: wsApi,
      success: function () {
        console.log("========= webSocket客户端连接成功！=========");
        that.globalData.socketOpen = true;
      },
      fail: (err => {
        console.error("JJLog:连接socket失败===:" + JSON.stringify(err));
      })
    })
  },


  //检测小程序更新
  checkAppletUpdate() {
    const updateManager = wx.getUpdateManager()
    updateManager.onCheckForUpdate(function (res) {

      if (res.hasUpdate) {
        //有版本更新
        updateManager.onUpdateReady(function () {
          wx.showModal({
            title: '更新提示',
            content: '新版本已经准备好，请重启应用！',
            confirmText: '重启',
            confirmColor: "#ff0000",
            showCancel: false,
            success: function (res) {
              if (res.confirm) {
                // 新版本已经下载好，调用 applyUpdate 应用新版本并重启
                updateManager.applyUpdate()
              }
            }
          })
        })
        updateManager.onUpdateFailed(function () {
          // 新版本下载失败
          wx.showModal({
            title: '系统提示',
            content: '小程序新版本更新失败，请您删除当前小程序，重新搜索打开',
          })
        })
      }
    })
  },

  //获取个人资料
  getTimProfile() {
    return;
    let promise = this.globalData.tim.getMyProfile();
    let that = this;
    promise.then(function (imResponse) {
      console.log("JJLog:获取到的tim个人资料是:" + JSON.stringify(imResponse)); // 个人资料 - Profile 实例
      if (that.globalData.userInfo && that.globalData.userInfo.name) {
        if (that.globalData.userInfo.name != imResponse.data.nick) {
          that.updateTimProfile(that.globalData.userInfo.name, that.globalData.avatar);
        }
        return;
      }
      if ((imResponse.data.avatar != that.globalData.avatar || imResponse.data.nick != that.globalData.nickName) && that.globalData.avatar) {
        console.log("JJLog:个人TIM资料有变动或者资料未设置，请设置===:");
        if (that.globalData.userInfo && that.globalData.userInfo.name) {
          that.updateTimProfile(that.globalData.userInfo.name, that.globalData.avatar);
        } else {
          that.updateTimProfile(that.globalData.nickName, that.globalData.avatar);
        }

      }


    }).catch(function (imError) {
      console.warn('JJLog获取tim个人资料失败:', imError); // 获取个人资料失败的相关信息
    });

  },
  //更新TIM个人资料
  updateTimProfile(nickName, avatar) {
    return;
    // 修改个人标配资料
    let promise = this.globalData.tim.updateMyProfile({
      nick: nickName,
      avatar: avatar,
    });
    promise.then(imResponse => {
      // 更新资料成功
      console.log("JJLog:更新TIM个人资料成功===", imResponse);
    }).catch(imError => {
      console.warn('JJLog更新TIM个人资料失败:', imError); // 更新资料失败的相关信息
    });
  },

  //TIM 设置全局监听最新聊天数据变化
  watch: function (method) {
    var obj = this.globalData;
    Object.defineProperty(obj, "newChatMsg", {
      configurable: true,
      enumerable: true,
      set: function (value) {
        this._name = value;
        console.log('是否会被执行2')
        method(value);
      },
      get: function () {
        // 可以在这里打印一些东西，然后在其他界面调用getApp().globalData.name的时候，这里就会执行。
        return this._name;
      }
    })
  },
  // TIM 监听聊天列表
  conversationChangeWatch: function (method) {
    var obj = this.globalData;
    Object.defineProperty(obj, "lastConversation", {
      configurable: true,
      enumerable: true,
      set: function (value) {
        this._name = value;
        console.log('是否会被执行2')
        method(value);
      },
      get: function () {
        // 可以在这里打印一些东西，然后在其他界面调用getApp().globalData.name的时候，这里就会执行。
        return this._name;
      }
    })
  },
  getSystemInfo() {
    wx.getSystemInfo({
      success: (res) => {
        console.log(res.windowWidth) // 获取可使用窗口高度
        this.globalData.windowWidth = res.windowWidth;
        this.globalData.windowHeight = res.windowHeight;

      }
    })
  },



  getThemeStyleConfigRequest() {
    getThemeStyleConfig().then(res => {
      // console.log("JJLog:获取到的主题配置是:" + JSON.stringify(res));
      let { mainColor,
        mainGrayColor,
        mainBlcakColor,
        mainRedColor,
        tagColor,
        tagBgColor,
        normalFont,
        smallFont,
        lineColor,
        middleFont,
        bigFont,
        commonFont,
        grayBgColor,
        littleFont,
        simpleGrayColor,
      } = res.data;
      this.globalData.themeStyle = `
            --main-color:${mainColor};
            --mainBlack-color:${mainBlcakColor};
            --tag-color:${tagColor};
            --mainRed-color:${mainRedColor};
            --tagBg-color:${tagBgColor};
            --normal-font:${normalFont};
            --small-font:${smallFont};
            --mainGray-color:${mainGrayColor};
            --line-color:${lineColor};
            --middle-font:${middleFont};
            --big-font:${bigFont};
            --common-font:${commonFont};
            --grayBg-color:${grayBgColor};
            --little-font:${littleFont};
            --simpleGray-color:${simpleGrayColor};
         `
    })
  },
  // 监听主题配置变化
  watchThemeStyle: function (method) {
    let obj = this.globalData;
    Object.defineProperty(obj, "themeStyle", {
      configurable: true,
      enumerable: true,
      set: function (value) {
        this._themeStyle = value;
        // console.log("JJLog:请求到这个themeStyle后被赋值=====");
        method(value)
      },
      get: function () {
        return this._themeStyle;
      }
    })
  },
  //获取右上角按钮属性:
  getMenuButton() {
    let res = wx.getMenuButtonBoundingClientRect();
    if (res.top) {
      this.globalData.menuButton.top = res.top;
      this.globalData.menuButton.height = res.height;
    }
    // console.log("JJLog:右上角按钮高度:" + JSON.stringify(res));
  },
  //获取城市列表
  getAreaList() {
    // if (wx.getStorageSync("areaList")) {
    //   return;
    // }
    return;
    cityLinkage().then(res => {
      console.log("JJLog:获取到的城市列表是:" + JSON.stringify(res));
      let arr = res.data;
      let newArr = [];

      wx.setStorage({
        key: "areaList",
        data: res.data,
        success: function () {
          console.log('存储城市列表成功');
        }
      })
    }).catch(err => {

    })
  },
  globalData: {
    appEnv: "release", // 小程序运行环境，默认正式
    unreadCount: 0,//消息未读数量
    tim: null,//tim实例
    socketTask: null,// scoket实例
    imAppId: IMAPP_ID,// im appId
    socketOpen: false,// scoket是否打开
    conversationList: [],//会话列表
    lastConversation: {},//最新的会话项
    newChatMsg: null,//最新的聊天消息
    userInfo: null,
    userId: null,//用户id
    themeStyle: "",
    giftCardNo: "",
    isLogin: false,//是否登录
    isAuthUserInfo: false,//用户是否授权了微信头像昵称
    avatar: "",//用户头像,
    levelData: {},//等级数据
    isBindMp: false,//是否绑定公众号
    nickName: "",//用户昵称
    refundData: {},//退货信息
    qrCode: "",//个人二维码
    name: "",//用户真实姓名
    roleName: "",//用户角色名称
    roleType: 1,//普通用户
    companyName: "",//公司名称
    companyNumber: "",//公司编号
    phone: "",//用户手机号
    weChat: "",//用户微信号
    mapHouseAddress: "",
    displayArr: [],
    selectProduct: {},//选择商品
    worksPreview: {},//作品预览数据
    openId: null,//用户openId
    officalQrCode: "",//公众号二维码
    reportHouse: {},//报备选中的楼盘
    reportHouseData: {},//需要跳转到有报备按钮页面的时候带走的房源信息
    articleHouse: {},//发帖选中的楼盘
    articleTags: [],//发布帖子的tags
    selectTheme: "",//选择的主题
    houseLat: 0,//房源经纬度
    locationProvince: "",//用户定位省份
    locationCity: "",//用户定位城市
    houseLon: 0,
    voteEndTime: "",//结束时间
    windowWidth: 0,//屏幕的px宽高
    windowHeight: 0,
    videoUrl: "",//视频
    isCheckOpen: true,
    webUrl: "",//webUrl通用
    commonShareTitle: "体贴入微，佳宝19，护你健康每一天！",
    houseQrCode: "",//房源二维码,
    inviteQrCode: "",//邀请二维码
    wxCodeImg: "",//微信二维码图片
    flatUrl: "",
    customDetailData: null,//定制回复详情
    selectAddressId: null,//选中的地址id
    cartList: [],//购物车数据
    knoDetail: {},//知识详情
    cartMoney: 0,// 购物车选中的商品
    balanceMoney: 0,
    wxMpLink: "",//公众号链接
    shopBackground: "",//商城背景图
    posterHouse: {

    },//海报房源数据
    requestCity: "成都市",//默认的请求城市
    resetCity: false,//是否重置了城市
    zcData: {},//驻场数据
    selectBankName: "",//选中的银行名称
    cashMinMoney: 0,//最小提现金额
    houseMoneyMinMoney: 0,//房款最低申请抵扣金额
    roleConfig: {},//角色配置信息
    posterInvite: {

    },//招聘海报数据
    scoreInfo: "",//积分说明富文本
    mealData: {},// 选中的套餐信息
    isFirstEnter: false,
    aiData: {},//ai找房参数
    commissionData: {},//佣金对象
    expertData: {

    },//选中的置业顾问信息
    categoryName: "",//分类名
    suggestData: {

    },//投诉对象
    userPayInfo: {

    },//用户支付信息
    activityDetail: {

    },//活动主体详情
    isCanVote:false,//是否可以投票
    voteSuccess:false,//是否投票成功
    voteData:"",
    countTimestamp: 0,//倒计时
    chatData: {
      conversationType: "C2C"
    },//聊天需要参数
    //经纪人审核详情:
    agentCheckDetail: {},
    //报备选择公司回调:
    reportCompanyData: {

    },
    selectAddressData: null,//选中的地址
    filterData: [

    ],//筛选条件
    cartNum: 0,//购物车数量
    jiesuanInfo: {

    },//需要的结算信息
    isCusSubmit: false,
    vipLevelMap: {
      1: "普通会员",
      2: "铜牌会员",
      3: "银牌会员",
      4: "金牌会员",
      5: "钻石会员",
      // 6:"至尊会员",
      // 7:"至尊会员",
      // 8:"至尊会员",
      // 9:"至尊会员",
      // 10:"至尊会员",
    },
    selectGoods: [],//选择的商品是
    bindUserId: null,//绑定userId,
    firstLoginHome: false,//是否是第一次登录，并且跳转到首页
    cropperAvatar: "",


    vrUrl: "",
    //右上角按钮的具体属性
    menuButton: {
      height: 32,
      top: 24,
    }
  }
})
